package cn.liujianbo.example.validate.controller.base;

import cn.liujianbo.example.validate.result.R;
import cn.liujianbo.example.validate.valid.ValidateGroup;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * @author 刘建波
 * @date 2020-12-24 13:49
 */
public interface BaseCrud<E, S> {

    /**
     * 新增单条记录
     * @param e
     * @return
     */
    @PostMapping
    R add(@Validated(ValidateGroup.Add.class) @RequestBody E e);

    /**
     * 根据id删除
     * @param id
     * @return
     */
    @DeleteMapping("{id}")
    R del(@PathVariable Long id);

    /**
     * 全量更新,传什么,数据库更新成什么
     * @param id
     * @param e
     * @return
     */
    @PutMapping("{id}")
    R update(@PathVariable Long id,
             @Validated(ValidateGroup.Update.class) @RequestBody E e);

    /**
     * 根据id 查询一条记录
     * @param id
     * @return
     */
    @GetMapping("{id}")
    R selectById(@PathVariable String id);

    /**
     * 根据条件动态查询
     * @param s
     * @return
     */
    @GetMapping
    R selectList(@Validated S s);
}
